localfile="/home/SENSETIME/liangchen.vendor/git/liangchen_test/paramiko/knows_host路径截图.png"
import os
import paramiko
"""
localfile:本地文件名称
remotedir:服务器目录名称
"""

#利用os.path.basename方法，获取文件名，去除localfile前面的很长的目录路径
def sshPutFile(ip,port,username,password,localfile,remotedir):

    #创建ssh链接
    ssh_conn=paramiko.Transport((ip,port))
    ssh_conn.connect(username=username,password=password)
    #建立ftp客户端
    ftp_client=paramiko.SFTPClient.from_transport(ssh_conn)

    #获取源文件的文件名
    file_name=os.path.basename(localfile)

    #处理服务器的目录名称 /etc/
    #判断一个remotedir字符串是否以“/”结尾，如果if条件返回True则后缀加上/,如果返回false，则无需加/
    if not remotedir.endswith("/"):
        remotedir=remotedir+"/"

    #dest_file_name是经过处理的远程目录，保证后面能有/
    dest_file_name=remotedir+file_name

    #利用建立好的ftp客户端，把本地文件推送到远程
    ftp_client.put(localfile,dest_file_name)




if __name__ == '__main__':
    servers={"10.4.7.24":{"username":"root","password":"1","port":22},
             "10.4.7.39":{"username":"root","password":"sensepallas@2021","port": 22}
             }

    source_file=input("源文件名称（以绝对路径方式）")
    remote_dir=input("服务器目录名称")

    for ip,info in servers.items():
        sshPutFile(
                  ip=ip,
                  port=info.get("port"),
                  username=info.get("username"),
                  password=info.get("password"),
                  localfile=source_file,
                  remotedir=remote_dir
                  )